<?php

/**
 * 安心站长xazz.cn，一个追求技术制造者。让网站、小程序、APP牛起来……
 *
 * php8.1^ 版本v1.8.2
 * 
 * cighsen02 365182575
 *
 * Create at: 2022.01.15
 * Update at: 2025.05.11
 */

require dirname(__DIR__, 2) . DIRECTORY_SEPARATOR . 'e' . DIRECTORY_SEPARATOR . 'class' . DIRECTORY_SEPARATOR . 'connect.php';

// 开启调试模式
if(Config::twoir('api.debug')) {

	// 显示所有错误信息
	ini_set('display_errors', 'On');
	error_reporting(E_ALL);

    define('DEBUG', true);
}

/**
 * $action 动作有： info, user等,都可以自己定义
 *
 * 操作类型,支持POST/GET
 */
$action = $_POST['act'] ?? $_GET['act'] ?? null;

// 会员
if ($action && in_array($action, ['logout', 'login', 'register', 'set_fava', 'show_key'])) {

    // 方法
    $method = str_contains($action, '_') ? camel_case($action) : $action;
    $action = 'user';
}
// // 公众号
// elseif ($action && in_array($action, ['access_token'])) {

// 	$method = str_contains($action, '_') ? camel_case($action) : $action;
// 	$action = 'offi';
// }
// 公众号
elseif(null === $action && (isset($_GET['signature']) || isset($_GET['echostr']))) {

    $method = 'verify';
	$action = 'offi';
}
// 调用信息时简化参数 不传act参数
elseif (null === $action && (isset($_GET['classid']) || isset($_GET['tablename']))) {

    $action = 'info';
}

// 来源，可以设置相应的请求头
if (array_key_exists('HTTP_ORIGIN', $_SERVER)) {

	$origin = $_SERVER['HTTP_ORIGIN'] ?? null;
}
elseif (array_key_exists('HTTP_REFERER', $_SERVER)) {

	$origin = $_SERVER['HTTP_REFERER'] ?? null;
}
else {

	$origin = $_SERVER['REMOTE_ADDR'] ?? null;
}

/**
 * api工作方式：html、json
 *
 * 默认为api开启模式
 */
define(
    'IS_API_ENABLED',
    match (true) {
        isset($method) && $method === 'verify' => false,
        $action && in_array($action, ['generate', 'qrcode'], true) => false,
        default => true,
    }
);

/**
 * 允许请求GET POST OPTIONS请求方法，其它不允许
 *
 * 特殊需要可以自己添加
 */
if(!in_array($_SERVER['REQUEST_METHOD'], ['GET', 'POST', 'OPTIONS']) || null === $action) throw new Exception("非法请求", 9401);

// 引用帝国文件
require ECMS_PATH . 'e' . DIRECTORY_SEPARATOR . 'class' . DIRECTORY_SEPARATOR . 'functions.php';
require ECMS_PATH . 'e' . DIRECTORY_SEPARATOR . 'class' . DIRECTORY_SEPARATOR . 't_functions.php';
include LoadLang('pub/fun.php', 0);
require ECMS_PATH . 'e' . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'dbcache' . DIRECTORY_SEPARATOR . 'class.php';
// 不需要会员信息的
if (!in_array($action, ['query', 'download'])) {
    require ECMS_PATH . 'e' . DIRECTORY_SEPARATOR . 'member' . DIRECTORY_SEPARATOR . 'class' . DIRECTORY_SEPARATOR . 'user.php';
    require ECMS_PATH . 'e' . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'dbcache' . DIRECTORY_SEPARATOR . 'MemberLevel.php';
}

$link	= db_connect();
$empire	= new mysqlquery();

switch($action) {

	// 获取信息
	case 'info':

	    $data = Twoir\Controller\Info::get($_GET);
	    break;

	// 点击
    case 'click':

        $data = Twoir\Controller\Info::onClick($_GET);
        break;

	// 会员
	case 'user':

		$data = forward_static_call_array([Twoir\Controller\Member::class, $method], [in_array($method, ['logout', 'setFava', 'showKey'], true) ? $_GET : $_POST]);
	    break;

	// 公众号
    case 'offi':

        $data = forward_static_call_array([Twoir\Controller\OffiAccount::class, $method], [$_GET, $_POST]);
        break;

	// 非法请求
	default:

        throw new Exception('非法请求', 9401);
}

db_close();
$empire = null;

// json格式输出
if (defined('IS_API_ENABLED') && IS_API_ENABLED) {

	// 待返回的数据
	$result = [
	    'code'      => 0,
	    'message'   => 'Ok'
	];

	if (isset($data) && $data) $result['data'] = $data;

	$data = json_encode($result, 15);

	header('Content-type:application/json');
}

// 定义标准输出
else {

    header('content-type:text/html;charset=utf-8');
}

echo $data;
